const Excel = require('exceljs');
const path = require('path');
const excelFile = path.resolve(__dirname, 'test.xlsx');
const workbook = new Excel.Workbook();

let flagNo = ''

const chapter = {};
const joint = [];
const nape = [];
const section = [];

let list = [];

function formatRichText (arr) {
  const text = [];
  arr.forEach(item => {
    text.push(item.text);
  })
  return text.join('');
}

workbook.xlsx.readFile(excelFile).then((res) => {
  const worksheet = workbook.getWorksheet(1);
  worksheet.eachRow((row, rowNumber) => {
    const cellValue = row.getCell(1).value;
    if (/^[0-9]+.*$/.test(cellValue)) {
      list = [];
      const newCellVal = typeof(cellValue) === 'number' ? cellValue.toString() : cellValue;
      const count = newCellVal.split('.').length - 1;
      if (count === 0 && !chapter.name) {
        // 如果没有点，则说明是章
        // 如果chapter对象那么为空，则赋值获取到的第二个单元格的内容，否则忽略后面所有章的内容
        // 此处需要对章内容做处理，因为读出来的是富文本
        chapter.name = formatRichText(row.getCell(2).value.richText);
        flagNo = newCellVal;
      } else if (count === 1) {
        /**
         * 如果有两个点，说明是节
         * 需要判断节数组中是否有对象，或者已有对象是否与之前操作的序号相等，都为否的情况下才去set新的节对象基础信息
         */
        if (joint.length === 0 || joint.some(item => item.no !== newCellVal)) {
          const obj = {};
          obj.no = newCellVal;
          obj.name = formatRichText(row.getCell(2).value.richText);
          joint.push(obj);
        }
        flagNo = newCellVal;
      } else if (count === 2) {
        if (nape.length === 0 || nape.some(item => item.no !== newCellVal)) {
          const obj = {};
          obj.no = newCellVal;
          obj.name = formatRichText(row.getCell(2).value.richText);
          nape.push(obj);
        }
        flagNo = newCellVal;
      } else if (count === 3) {
        if (section.length === 0 || section.some(item => item.no !== newCellVal)) {
          const obj = {};
          obj.no = newCellVal;
          obj.name = formatRichText(row.getCell(2).value.richText);
          section.push(obj);
        }
        flagNo = newCellVal;
      }
    } else {
      // 如果仅包含一个英文字母，排除掉第一行的“序号”
      if (/^[A-Z]{1}$/.test(cellValue)) {
        const obj = {};
        obj.name = row.getCell(3).value.richText ? formatRichText(row.getCell(3).value.richText) : row.getCell(3).value
        obj.mount = JSON.stringify(row.getCell(7).value) === '{}' ? row.getCell(7).value.result : row.getCell(7).value;
        list.push(obj);
        if ((flagNo.split('.').length - 1) === 0) {
          // 是章下的内容
          chapter.child = list;
        } else if ((flagNo.split('.').length - 1) === 1) {
          // 是节下面的内容
          joint.map(item => {
            if (item.no === flagNo) {
              item.child = list;
            }
          })
        } else if ((flagNo.split('.').length - 1) === 2) {
          // 是项下面的内容
          nape.map(item => {
            if (item.no === flagNo) {
              item.child = list;
            }
          })
        } else if ((flagNo.split('.').length - 1) === 3) {
          // 是目下面的内容
          section.map(item => {
            if (item.no === flagNo) {
              item.child = list;
            }
          })
        }
      }
    }
  })

  console.log(JSON.stringify({
    chapter: chapter,
    joint: joint,
    nape: nape,
    section: section
  }))
}).catch(err => {
  console.log(err)
})
